# -*- coding: utf-8 -*-

# https://www.cnblogs.com/sui776265233/p/9224754.html


import hashlib
m=hashlib.md5()                               # 括号内也可以传值，类型也要求是bytes类型
m.update('测试！'.encode('utf-8'))
print(m.hexdigest())                          # 908b9e1a64571894d792ae4b4e7e90f8


# import hashlib
# m=hashlib.md5()                               # 括号内也可以传值，类型也要求是bytes类型
# m.update('你好呀！'.encode('utf-8'))
# print(m.hexdigest())                          # 9e49eb8e75b9a87424e388b862ea5f83
#
# # 与上述hash的结果一样
# import hashlib
# m=hashlib.md5('你'.encode('utf-8'))            # 括号内也可以传值，类型也要求是bytes类型
# m.update('好呀！'.encode('utf-8'))
# print(m.hexdigest())

m1 = b'abc'.decode('utf-8')
m2 = '中文'.encode('utf-8')
print(m1)
print(m2)


# 摘要算法应用
# 摘要算法能应用到什么地方？举个常用例子：
#
# 任何允许用户登录的网站都会存储用户登录的用户名和口令。如何存储用户名和口令呢？方法是存到数据库表中：
#
# name	password
# michael	123456
# bob	    abc999
# alice	alice2008
# 如果以明文保存用户口令，如果数据库泄露，所有用户的口令就落入黑客的手里。此外，
# 网站运维人员是可以访问数据库的，也就是能获取到所有用户的口令。
#
# 正确的保存口令的方式是不存储用户的明文口令，而是存储用户口令的摘要，比如MD5：
#
# username	password
# michael	    e10adc3949ba59abbe56e057f20f883e
# bob	        878ef96e86145580c38c87f0410ad153
# alice	    99b1c2188db85afee403b1536010c2c9
# 当用户登录时，首先计算用户输入的明文口令的MD5，然后和数据库存储的MD5对比，
# 如果一致，说明口令输入正确，如果不一致，口令肯定错误。


# 由于常用口令的MD5值很容易被计算出来，所以，要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5，
# 这一方法通过对原始口令加一个复杂字符串来实现，俗称“加盐”：
#
# def calc_md5(password):
#     return get_md5(password + 'the-Salt')
# 经过Salt处理的MD5口令，只要Salt不被黑客知道，即使用户输入简单口令，也很难通过MD5反推明文口令
